home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / Icon 8.1 / msm-2 / iconc.sit / icon_g.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-09-19  |  7.8 KB  |  289 lines  |  [TEXT/MPS ]

  1. /*
  2.  * icong.c -- grammar for iconc, Icon Version 8.0.
  3.  *
  4.  * NOTE: Any modifications of this grammar should be
  5.  * propagated to any affected macro in gdefs.h.
  6.  */
  7. #include "icon_g.h"
  8.  
  9. %{
  10. /*#include "../h/gsupport.h"*/
  11. /*#include "tlex.h"*/
  12. /*#include "trans.h"*/
  13. /*#include "tsym.h"*/
  14. /*#include "tree.h"*/
  15. /*#include "tcode.h" */
  16. /*#include "tproto.h"*/
  17. /*#define YYSTYPE nodeptr*/
  18. /*#define YYMAXDEPTH 500*/
  19. #include "gdefs.h"
  20. %}
  21.  
  22. %%
  23.  
  24. program    : decls EOFX {Progend($1,$2);} ;
  25.  
  26. decls    : ;    
  27.     | decls decl ;
  28.  
  29. decl    : record {Recdcl($1);} ;
  30.     | proc {Procdcl($1);} ;
  31.     | global {Globdcl($1);} ;
  32.     | link {Linkdcl($1);} ;
  33.         | invocable {Invocdcl($1)};
  34.  
  35. link    : LINK lnklist {Link($1, $2);} ;
  36.  
  37. lnklist    : lnkfile    ;
  38.     | lnklist COMMA lnkfile {Lnklist($1,$2,$3);} ;
  39.  
  40. lnkfile    : IDENT {Lnkfile1($1);} ;
  41.     | STRINGLIT {Lnkfile2($1);} ;
  42.  
  43. invocable : INVOCABLE invoclist {Invocable($1, $2);} ;
  44.  
  45. invoclist : invocop;
  46.       | invoclist COMMA invocop {Invoclist($1,$2,$3);} ;
  47.  
  48. invocop  : IDENT {Invocop1($1);} ;
  49.      | STRINGLIT {Invocop2($1);} ;
  50.      | STRINGLIT COLON INTLIT {Invocop3($1,$2,$3);} ;
  51.  
  52. global    : GLOBAL {Global0($1);} idlist  {Global1($1, $2, $3);} ;
  53.  
  54. record    : RECORD IDENT {Record1($1,$2);} LPAREN fldlist RPAREN {
  55.         Record2($1,$2,$3,$4,$5,$6);
  56.         } ;
  57.  
  58. fldlist    : {Arglist1();} ;
  59.     | idlist {Arglist2($1);} ;
  60.  
  61. proc    : prochead SEMICOL locals initial procbody END {
  62.         Proc1($1,$2,$3,$4,$5,$6);
  63.         } ;
  64.  
  65. prochead: PROCEDURE IDENT {Prochead1($1,$2);} LPAREN arglist RPAREN {
  66.         Prochead2($1,$2,$3,$4,$5,$6);
  67.         } ;
  68.  
  69. arglist    : {Arglist1();} ;
  70.     | idlist {Arglist2($1);} ;
  71.     | idlist LBRACK RBRACK {Arglist3($1,$2,$3);} ;
  72.  
  73.  
  74. idlist    : IDENT {
  75.         Ident($1);
  76.         } ;
  77.     | idlist COMMA IDENT {
  78.         Idlist($1,$2,$3);
  79.         } ;
  80.  
  81. locals    : {Locals1();} ;
  82.     | locals retention idlist SEMICOL {Locals2($1,$2,$3,$4);} ;
  83.  
  84. retention: LOCAL {Local($1);} ;
  85.     | STATIC {Static($1);} ;
  86.     | DYNAMIC {Dynamic($1);} ;
  87.  
  88. initial    : {Initial1();} ;
  89.     | INITIAL expr SEMICOL {Initial2($1,$2,$3);} ;
  90.  
  91. procbody: {Procbody1();} ;
  92.     | nexpr SEMICOL procbody {Procbody2($1,$2,$3);} ;
  93.  
  94. nexpr    : {Nexpr();} ;
  95.     | expr ;
  96.  
  97. expr    : expr1a    ;
  98.     | expr AND expr1a    {Bamper($1,$2,$3);} ;
  99.  
  100. expr1a    : expr1    ;
  101.     | expr1a QMARK expr1    {Bques($1,$2,$3);} ;
  102.  
  103. expr1    : expr2 ;
  104.     | expr2 SWAP expr1 {Bswap($1,$2,$3);} ;
  105.     | expr2 ASSIGN expr1 {Bassgn($1,$2,$3);} ;
  106.     | expr2 REVSWAP expr1 {Brswap($1,$2,$3);} ;
  107.     | expr2 REVASSIGN expr1 {Brassgn($1,$2,$3);} ;
  108.     | expr2 AUGCONCAT expr1 {Baugcat($1,$2,$3);} ;
  109.     | expr2 AUGLCONCAT expr1 {Bauglcat($1,$2,$3);} ;
  110.     | expr2 AUGDIFF expr1 {Bdiffa($1,$2,$3);} ;
  111.     | expr2 AUGUNION expr1 {Buniona($1,$2,$3);} ;
  112.     | expr2 AUGPLUS expr1 {Bplusa($1,$2,$3);} ;
  113.     | expr2 AUGMINUS expr1 {Bminusa($1,$2,$3);} ;
  114.     | expr2 AUGSTAR expr1 {Bstara($1,$2,$3);} ;
  115.     | expr2 AUGINTER expr1 {Bintera($1,$2,$3);} ;
  116.     | expr2 AUGSLASH expr1 {Bslasha($1,$2,$3);} ;
  117.     | expr2 AUGMOD expr1 {Bmoda($1,$2,$3);} ;
  118.     | expr2 AUGCARET expr1 {Bcareta($1,$2,$3);} ;
  119.     | expr2 AUGNMEQ expr1 {Baugeq($1,$2,$3);} ;
  120.     | expr2 AUGEQUIV expr1 {Baugeqv($1,$2,$3);} ;
  121.     | expr2 AUGNMGE expr1 {Baugge($1,$2,$3);} ;
  122.     | expr2 AUGNMGT expr1 {Bauggt($1,$2,$3);} ;
  123.     | expr2 AUGNMLE expr1 {Baugle($1,$2,$3);} ;
  124.     | expr2 AUGNMLT expr1 {Bauglt($1,$2,$3);} ;
  125.     | expr2 AUGNMNE expr1 {Baugne($1,$2,$3);} ;
  126.     | expr2 AUGNEQUIV expr1 {Baugneqv($1,$2,$3);} ;
  127.     | expr2 AUGSEQ expr1 {Baugseq($1,$2,$3);} ;
  128.     | expr2 AUGSGE expr1 {Baugsge($1,$2,$3);} ;
  129.     | expr2 AUGSGT expr1 {Baugsgt($1,$2,$3);} ;
  130.     | expr2 AUGSLE expr1 {Baugsle($1,$2,$3);} ;
  131.     | expr2 AUGSLT expr1 {Baugslt($1,$2,$3);} ;
  132.     | expr2 AUGSNE expr1 {Baugsne($1,$2,$3);} ;
  133.     | expr2 AUGQMARK expr1 {Baugques($1,$2,$3);} ;
  134.     | expr2 AUGAND expr1 {Baugamper($1,$2,$3);} ;
  135.     | expr2 AUGAT expr1 {Baugact($1,$2,$3);} ;
  136.  
  137. expr2    : expr3 ;
  138.     | expr2 TO expr3 {To0($1,$2,$3);} ;
  139.     | expr2 TO expr3 BY expr3 {To1($1,$2,$3,$4,$5);} ;
  140.  
  141. expr3    : expr4 ;
  142.     | expr4 BAR expr3 {Alt($1,$2,$3);} ;
  143.  
  144. expr4    : expr5 ;
  145.     | expr4 SEQ expr5 {Bseq($1,$2,$3);} ;
  146.     | expr4 SGE expr5 {Bsge($1,$2,$3);} ;
  147.     | expr4 SGT expr5 {Bsgt($1,$2,$3);} ;
  148.     | expr4 SLE expr5 {Bsle($1,$2,$3);} ;
  149.     | expr4 SLT expr5 {Bslt($1,$2,$3);} ;
  150.     | expr4 SNE expr5 {Bsne($1,$2,$3);} ;
  151.     | expr4 NMEQ expr5 {Beq($1,$2,$3);} ;
  152.     | expr4 NMGE expr5 {Bge($1,$2,$3);} ;
  153.     | expr4 NMGT expr5 {Bgt($1,$2,$3);} ;
  154.     | expr4 NMLE expr5 {Ble($1,$2,$3);} ;
  155.     | expr4 NMLT expr5 {Blt($1,$2,$3);} ;
  156.     | expr4 NMNE expr5 {Bne($1,$2,$3);} ;
  157.     | expr4 EQUIV expr5 {Beqv($1,$2,$3);} ;
  158.     | expr4 NEQUIV expr5 {Bneqv($1,$2,$3);} ;
  159.  
  160. expr5    : expr6 ;
  161.     | expr5 CONCAT expr6 {Bcat($1,$2,$3);} ;
  162.     | expr5 LCONCAT expr6 {Blcat($1,$2,$3);} ;
  163.  
  164. expr6    : expr7 ;
  165.     | expr6 PLUS expr7 {Bplus($1,$2,$3);} ;
  166.     | expr6 DIFF expr7 {Bdiff($1,$2,$3);} ;
  167.     | expr6 UNION expr7 {Bunion($1,$2,$3);} ;
  168.     | expr6 MINUS expr7 {Bminus($1,$2,$3);} ;
  169.  
  170. expr7    : expr8 ;
  171.     | expr7 STAR expr8 {Bstar($1,$2,$3);} ;
  172.     | expr7 INTER expr8 {Binter($1,$2,$3);} ;
  173.     | expr7 SLASH expr8 {Bslash($1,$2,$3);} ;
  174.     | expr7 MOD expr8 {Bmod($1,$2,$3);} ;
  175.  
  176. expr8    : expr9 ;
  177.     | expr9 CARET expr8 {Bcaret($1,$2,$3);} ;
  178.  
  179. expr9    : expr10 ;
  180.     | expr9 BACKSLASH expr10 {Blim($1,$2,$3);} ;
  181.     | expr9 AT expr10 {Bact($1,$2,$3);};
  182.     | expr9 BANG expr10 {Apply($1,$2,$3);};
  183.  
  184. expr10    : expr11 ;
  185.     | AT expr10 {Uat($1,$2);} ;
  186.     | NOT expr10 {Unot($1,$2);} ;
  187.     | BAR expr10 {Ubar($1,$2);} ;
  188.     | CONCAT expr10 {Uconcat($1,$2);} ;
  189.     | LCONCAT expr10 {Ulconcat($1,$2);} ;
  190.     | DOT expr10 {Udot($1,$2);} ;
  191.     | BANG expr10 {Ubang($1,$2);} ;
  192.     | DIFF expr10 {Udiff($1,$2);} ;
  193.     | PLUS expr10 {Uplus($1,$2);} ;
  194.     | STAR expr10 {Ustar($1,$2);} ;
  195.     | SLASH expr10 {Uslash($1,$2);} ;
  196.     | CARET expr10 {Ucaret($1,$2);} ;
  197.     | INTER expr10 {Uinter($1,$2);} ;
  198.     | TILDE expr10 {Utilde($1,$2);} ;
  199.     | MINUS expr10 {Uminus($1,$2);} ;
  200.     | NMEQ expr10 {Unumeq($1,$2);} ;
  201.     | NMNE expr10 {Unumne($1,$2);} ;
  202.     | SEQ expr10 {Ulexeq($1,$2);} ;
  203.     | SNE expr10 {Ulexne($1,$2);} ;
  204.     | EQUIV expr10 {Uequiv($1,$2);} ;
  205.     | UNION expr10 {Uunion($1,$2);} ;
  206.     | QMARK expr10 {Uqmark($1,$2);} ;
  207.     | NEQUIV expr10 {Unotequiv($1,$2);} ;
  208.     | BACKSLASH expr10 {Ubackslash($1,$2);} ;
  209.  
  210. expr11    : literal ;
  211.     | section ;
  212.     | return ;
  213.     | if ;
  214.     | case ;
  215.     | while ;
  216.     | until ;
  217.     | every ;
  218.     | repeat ;
  219.     | CREATE expr {Create($1,$2);} ;
  220.     | IDENT {Var($1);} ;
  221.     | NEXT {Next($1);} ;
  222.     | BREAK nexpr {Break($1,$2);} ;
  223.     | LPAREN exprlist RPAREN {Paren($1,$2,$3);} ;
  224.     | LBRACE compound RBRACE {Brace($1,$2,$3);} ;
  225.     | LBRACK exprlist RBRACK {Brack($1,$2,$3);} ;
  226.     | expr11 LBRACK exprlist RBRACK {Subscript($1,$2,$3,$4);} ;
  227.     | expr11 LBRACE    RBRACE {Pdco0($1,$2,$3);} ;
  228.     | expr11 LBRACE pdcolist RBRACE {Pdco1($1,$2,$3,$4);} ;
  229.     | expr11 LPAREN exprlist RPAREN {Invoke($1,$2,$3,$4);} ;
  230.     | expr11 DOT IDENT {Field($1,$2,$3);} ;
  231.     | AND FAIL {Kfail($1,$2);} ;
  232.     | AND IDENT {Keyword($1,$2);} ;
  233.  
  234. while    : WHILE expr {While0($1,$2);} ;
  235.     | WHILE expr DO expr {While1($1,$2,$3,$4);} ;
  236.  
  237. until    : UNTIL expr {Until0($1,$2);} ;
  238.     | UNTIL expr DO expr {Until1($1,$2,$3,$4);} ;
  239.  
  240. every    : EVERY expr {Every0($1,$2);} ;
  241.     | EVERY expr DO expr {Every1($1,$2,$3,$4);} ;
  242.  
  243. repeat    : REPEAT expr {Repeat($1,$2);} ;
  244.  
  245. return    : FAIL {Fail($1);} ;
  246.     | RETURN nexpr {Return($1,$2);} ;
  247.     | SUSPEND nexpr {Suspend0($1,$2);} ;
  248.         | SUSPEND expr DO expr {Suspend1($1,$2,$3,$4);};
  249.  
  250. if    : IF expr THEN expr {If0($1,$2,$3,$4);} ;
  251.     | IF expr THEN expr ELSE expr {If1($1,$2,$3,$4,$5,$6);} ;
  252.  
  253. case    : CASE expr OF LBRACE caselist RBRACE {Case($1,$2,$3,$4,$5,$6);} ;
  254.  
  255. caselist: cclause ;
  256.     | caselist SEMICOL cclause {Caselist($1,$2,$3);} ;
  257.  
  258. cclause    : DEFAULT COLON expr {Cclause0($1,$2,$3);} ;
  259.     | expr COLON expr {Cclause1($1,$2,$3);} ;
  260.  
  261. exprlist: nexpr                {Elst0($1);}
  262.     | exprlist COMMA nexpr {Elst1($1,$2,$3);} ;
  263.  
  264. pdcolist: nexpr {
  265.         Pdcolist0($1);
  266.         } ;
  267.     | pdcolist COMMA nexpr {
  268.         Pdcolist1($1,$2,$3);
  269.         } ;
  270.  
  271. literal    : INTLIT {Iliter($1);} ;
  272.     | REALLIT {Rliter($1);} ;
  273.     | STRINGLIT {Sliter($1);} ;
  274.     | CSETLIT {Cliter($1);} ;
  275.  
  276. section    : expr11 LBRACK expr sectop expr RBRACK {Section($1,$2,$3,$4,$5,$6);} ;
  277.  
  278. sectop    : COLON {Colon($1);} ;
  279.     | PCOLON {Pcolon($1);} ;
  280.     | MCOLON {Mcolon($1);} ;
  281.  
  282. compound: nexpr ;
  283.     | nexpr SEMICOL compound {Compound($1,$2,$3);} ;
  284.  
  285. program    : error decls EOFX ;
  286. proc    : prochead error procbody END ;
  287. expr    : error ;
  288. %%
  289.